/**
 * sliding window 滑动窗口解法
 * @param {string} s 
 */

var lengthOfLongestSubstring = function (s) {
    const set = new Set()
    let maxLength = 0
    if (s.length == 0) return 0
    for (let i = 0; i < s.length; i++) {
        // set里没有s[i],说明目前没有重复字符
        if (!set.has(s[i])) {
            // 把s[i]添加到set里
            set.add(s[i])
            // 更新maxLength
            maxLength = Math.max(maxLength, set.size)
        } else {
            // 如果set里有s[i]，则从set里开始删除s[j],直到没有s[i]为止
            while (set.has(s[i])) {
                set.delete(s[j])
                j++
            }
            // 把s[i]添加到set里
            set.add(s[i])
        }
    }
    return maxLength
}